package com.avicit.zipkinkafkaesserver.commands;

import scala.Tuple2;
import zipkin2.Span;

import java.util.List;
import java.util.stream.Collectors;


/**
 * 接口耗时列表
 */
public class InterfaceStatusDurationListCommand implements DataListCommand<Tuple2<String, Double>> {
    @Override
    public List<Tuple2<String, Double>> execute(List<Span> spanList) {
        return spanList
                .stream()
                .map(span ->
                     new Tuple2<String, Double>(new StringBuffer()
                            .append(span.localEndpoint().ipv4()).append("@")//ip
                            .append(span.localEndpoint().serviceName()).append("@")//服务名
                            .append(span.tags().get("http.method")).append("@")//请求方法
                            .append(span.tags().get("http.path")).append("@")// 请求路径
                             .append(span.tags().get("error") == null ? "ok" : "error").append("@")
                             .append(span.timestampAsLong()/1000)//创建时间
                            .toString(),
                            //接口耗时，链路上的不包括网络延迟
                            Double.valueOf(span.duration())))
                .collect(Collectors.toList());

    }
}
